﻿using System;
using UnityEditor;
using UnityEngine;

namespace UI.Panels
{
    public enum EPanelType
    {
        Normal = 0, // 普通界面。 和其他普通界面互斥
        Common = 1, // 通用界面。 通用界面可以和普通界面同时存在
        Dependent = 2, // 依赖界面。 依赖界面可以和普通界面同时存在，但是依赖界面会随着被依赖的界面的关闭而关闭，且被依赖的界面打开时，才能打开该界面
        NotManaged = 3, // 不受管理的界面。 不受管理的界面可以和普通界面同时存在，但是不受管理的界面不会被管理器管理，需要手动关闭。 适用于主界面等不需要关闭的界面
        
    }

    public abstract class UIPanel : MonoBehaviour
    {
        public EPanelType panelType = EPanelType.Normal;
        protected bool m_CanCloseByOtherOpen = true; // 是否可以被其他界面打开时关闭

        public int uiLayerIndex;
        public int orderInLayer;
        
        protected UILayer m_UiLayer;

        #region 生命周期函数
        
        //！ 子类如果重写以下生命周期函数，必须调用基类的生命周期函数
            
        protected virtual void Awake()
        {
            m_UiLayer = UIManager.Instance.GetUILayer(uiLayerIndex);
        }

        protected virtual void OnEnable()
        {
            m_UiLayer?.SetUICameraAble(true);
        }
        
        protected virtual void OnDisable()
        {
            m_UiLayer?.SetUICameraAble(false);
        }

        #endregion
    }
}